// 引入pixiJs
import * as PIXI from 'pixi.js';

// 默认导出加载器构造函数
export default class Loader {
    public loader: PIXI.Loader;
    private loadingScreen: PIXI.Text;

    constructor(app: PIXI.Application, onAssetsLoaded: () => void) {
        // 将pixiJs的'加载器对象'挂载到this上
        this.loader = app.loader;
        // 调用加载图像资源的方法
        this.loadAssets();
        // 当图像资源加载完成时触发
        this.loader.load(() => {
            // 移除舞台上的'加载状态'文本精灵
            app.stage.removeChild(this.loadingScreen);
            // 执行资源加载完成时的回调函数
            onAssetsLoaded();
        });
        // 调用生成'加载屏幕'的方法
        this.generateLoadingScreen(app.screen.width, app.screen.height);
        // 将'加载状态'文本精灵添加到舞台上
        app.stage.addChild(this.loadingScreen);
    }
    // 加载图像资源的方法
    private loadAssets() {
        // 加载图像资源
        this.loader.add([
            { name: 'BG.png', url: './assets/BG.png' },
            { name: 'BTN_Spin.png', url: './assets/BTN_Spin.png' },
            { name: 'SYM1.png', url: './assets/SYM1.png' },
            { name: 'SYM2.png', url: './assets/SYM2.png' },
            { name: 'SYM3.png', url: './assets/SYM3.png' },
            { name: 'SYM4.png', url: './assets/SYM4.png' },
            { name: 'SYM5.png', url: './assets/SYM5.png' },
            { name: 'SYM6.png', url: './assets/SYM6.png' },
            { name: 'reelBg.png', url: './assets/reelBg.png' },
            { name: 'win.png', url: './assets/win.png' },
            { name: 'reelContainerBg.png', url: './assets/reelContainerBg.png' },
            { name: 'horn.png', url: './assets/horn.png' }
        ])
    }

    // 生成'加载屏幕'的方法
    private generateLoadingScreen(appWidth: number, appHeight: number) {
        // 创建文字样式
        const style = new PIXI.TextStyle({
            fontFamily: 'Arial',
            fontSize: 36,
            fontWeight: 'bold',
            fill: '#ffffff',
        });
        // 创建'加载状态'文本精灵
        const playText = new PIXI.Text('Loading...', style);
        // 设置'加载状态'文本精灵的位置
        playText.x = (appWidth - playText.width) / 2;
        playText.y = (appHeight - playText.height) / 2;
        // 将'加载状态'文本精灵挂载到this上
        this.loadingScreen = playText;
    }
}
